package com.one.blocks.rbac.mapper;

import com.one.blocks.mvc.mapper.BaseMapper;
import com.one.blocks.rbac.domain.SysMenu;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author <a href="mailto:idler41@163.con">idler41</a> created on 2022-05-01 10:06:14
 */
@Repository
public interface SysMenuMapper extends BaseMapper<SysMenu> {

    /**
     * 查询指定角色的所有权限
     *
     * @param roleId 指定角色id
     * @return 所有权限
     */
    List<String> selectPerms(Integer roleId);

    /**
     * 查询所有目录树集合
     *
     * @param visible 是否可见
     * @param types   目录类型
     * @return 所有目录
     */
    List<SysMenu> selectTree(@Param("visible") Integer visible, @Param("types") Integer[] types);

    /**
     * 联表sys_menu_config查询目录树集合
     *
     * @param roleType 角色类型
     * @param visible  是否可见
     * @param types    目录类型
     * @return 所有目录
     */
    List<SysMenu> selectTreeJoinConfig(
            @Param("roleType") Integer roleType,
            @Param("visible") Integer visible,
            @Param("types") Integer[] types
    );

    /**
     * 联表sys_role_menu查询目录树集合
     *
     * @param roleId  角色id
     * @param visible 是否可见
     * @param types   目录类型
     * @return 所有目录
     */
    List<SysMenu> selectTreeJoinRole(
            @Param("roleId") Integer roleId,
            @Param("visible") Integer visible,
            @Param("types") Integer[] types
    );
}